{
 "cells": [
              {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<table align=\"left\">\n",
    "  <td>\n",
    "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/gimseng/99-ML-Learning-Projects/blob/master/010/solution/knn_using_sklearn.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
    "  </td>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Importing libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn import metrics"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Study the data you have"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "# iris dataset from sklearn datasets\n",
    "dataset = load_iris()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[5.1, 3.5, 1.4, 0.2],\n",
       "       [4.9, 3. , 1.4, 0.2],\n",
       "       [4.7, 3.2, 1.3, 0.2],\n",
       "       [4.6, 3.1, 1.5, 0.2],\n",
       "       [5. , 3.6, 1.4, 0.2],\n",
       "       [5.4, 3.9, 1.7, 0.4],\n",
       "       [4.6, 3.4, 1.4, 0.3],\n",
       "       [5. , 3.4, 1.5, 0.2],\n",
       "       [4.4, 2.9, 1.4, 0.2],\n",
       "       [4.9, 3.1, 1.5, 0.1],\n",
       "       [5.4, 3.7, 1.5, 0.2],\n",
       "       [4.8, 3.4, 1.6, 0.2],\n",
       "       [4.8, 3. , 1.4, 0.1],\n",
       "       [4.3, 3. , 1.1, 0.1],\n",
       "       [5.8, 4. , 1.2, 0.2],\n",
       "       [5.7, 4.4, 1.5, 0.4],\n",
       "       [5.4, 3.9, 1.3, 0.4],\n",
       "       [5.1, 3.5, 1.4, 0.3],\n",
       "       [5.7, 3.8, 1.7, 0.3],\n",
       "       [5.1, 3.8, 1.5, 0.3],\n",
       "       [5.4, 3.4, 1.7, 0.2],\n",
       "       [5.1, 3.7, 1.5, 0.4],\n",
       "       [4.6, 3.6, 1. , 0.2],\n",
       "       [5.1, 3.3, 1.7, 0.5],\n",
       "       [4.8, 3.4, 1.9, 0.2],\n",
       "       [5. , 3. , 1.6, 0.2],\n",
       "       [5. , 3.4, 1.6, 0.4],\n",
       "       [5.2, 3.5, 1.5, 0.2],\n",
       "       [5.2, 3.4, 1.4, 0.2],\n",
       "       [4.7, 3.2, 1.6, 0.2],\n",
       "       [4.8, 3.1, 1.6, 0.2],\n",
       "       [5.4, 3.4, 1.5, 0.4],\n",
       "       [5.2, 4.1, 1.5, 0.1],\n",
       "       [5.5, 4.2, 1.4, 0.2],\n",
       "       [4.9, 3.1, 1.5, 0.2],\n",
       "       [5. , 3.2, 1.2, 0.2],\n",
       "       [5.5, 3.5, 1.3, 0.2],\n",
       "       [4.9, 3.6, 1.4, 0.1],\n",
       "       [4.4, 3. , 1.3, 0.2],\n",
       "       [5.1, 3.4, 1.5, 0.2],\n",
       "       [5. , 3.5, 1.3, 0.3],\n",
       "       [4.5, 2.3, 1.3, 0.3],\n",
       "       [4.4, 3.2, 1.3, 0.2],\n",
       "       [5. , 3.5, 1.6, 0.6],\n",
       "       [5.1, 3.8, 1.9, 0.4],\n",
       "       [4.8, 3. , 1.4, 0.3],\n",
       "       [5.1, 3.8, 1.6, 0.2],\n",
       "       [4.6, 3.2, 1.4, 0.2],\n",
       "       [5.3, 3.7, 1.5, 0.2],\n",
       "       [5. , 3.3, 1.4, 0.2],\n",
       "       [7. , 3.2, 4.7, 1.4],\n",
       "       [6.4, 3.2, 4.5, 1.5],\n",
       "       [6.9, 3.1, 4.9, 1.5],\n",
       "       [5.5, 2.3, 4. , 1.3],\n",
       "       [6.5, 2.8, 4.6, 1.5],\n",
       "       [5.7, 2.8, 4.5, 1.3],\n",
       "       [6.3, 3.3, 4.7, 1.6],\n",
       "       [4.9, 2.4, 3.3, 1. ],\n",
       "       [6.6, 2.9, 4.6, 1.3],\n",
       "       [5.2, 2.7, 3.9, 1.4],\n",
       "       [5. , 2. , 3.5, 1. ],\n",
       "       [5.9, 3. , 4.2, 1.5],\n",
       "       [6. , 2.2, 4. , 1. ],\n",
       "       [6.1, 2.9, 4.7, 1.4],\n",
       "       [5.6, 2.9, 3.6, 1.3],\n",
       "       [6.7, 3.1, 4.4, 1.4],\n",
       "       [5.6, 3. , 4.5, 1.5],\n",
       "       [5.8, 2.7, 4.1, 1. ],\n",
       "       [6.2, 2.2, 4.5, 1.5],\n",
       "       [5.6, 2.5, 3.9, 1.1],\n",
       "       [5.9, 3.2, 4.8, 1.8],\n",
       "       [6.1, 2.8, 4. , 1.3],\n",
       "       [6.3, 2.5, 4.9, 1.5],\n",
       "       [6.1, 2.8, 4.7, 1.2],\n",
       "       [6.4, 2.9, 4.3, 1.3],\n",
       "       [6.6, 3. , 4.4, 1.4],\n",
       "       [6.8, 2.8, 4.8, 1.4],\n",
       "       [6.7, 3. , 5. , 1.7],\n",
       "       [6. , 2.9, 4.5, 1.5],\n",
       "       [5.7, 2.6, 3.5, 1. ],\n",
       "       [5.5, 2.4, 3.8, 1.1],\n",
       "       [5.5, 2.4, 3.7, 1. ],\n",
       "       [5.8, 2.7, 3.9, 1.2],\n",
       "       [6. , 2.7, 5.1, 1.6],\n",
       "       [5.4, 3. , 4.5, 1.5],\n",
       "       [6. , 3.4, 4.5, 1.6],\n",
       "       [6.7, 3.1, 4.7, 1.5],\n",
       "       [6.3, 2.3, 4.4, 1.3],\n",
       "       [5.6, 3. , 4.1, 1.3],\n",
       "       [5.5, 2.5, 4. , 1.3],\n",
       "       [5.5, 2.6, 4.4, 1.2],\n",
       "       [6.1, 3. , 4.6, 1.4],\n",
       "       [5.8, 2.6, 4. , 1.2],\n",
       "       [5. , 2.3, 3.3, 1. ],\n",
       "       [5.6, 2.7, 4.2, 1.3],\n",
       "       [5.7, 3. , 4.2, 1.2],\n",
       "       [5.7, 2.9, 4.2, 1.3],\n",
       "       [6.2, 2.9, 4.3, 1.3],\n",
       "       [5.1, 2.5, 3. , 1.1],\n",
       "       [5.7, 2.8, 4.1, 1.3],\n",
       "       [6.3, 3.3, 6. , 2.5],\n",
       "       [5.8, 2.7, 5.1, 1.9],\n",
       "       [7.1, 3. , 5.9, 2.1],\n",
       "       [6.3, 2.9, 5.6, 1.8],\n",
       "       [6.5, 3. , 5.8, 2.2],\n",
       "       [7.6, 3. , 6.6, 2.1],\n",
       "       [4.9, 2.5, 4.5, 1.7],\n",
       "       [7.3, 2.9, 6.3, 1.8],\n",
       "       [6.7, 2.5, 5.8, 1.8],\n",
       "       [7.2, 3.6, 6.1, 2.5],\n",
       "       [6.5, 3.2, 5.1, 2. ],\n",
       "       [6.4, 2.7, 5.3, 1.9],\n",
       "       [6.8, 3. , 5.5, 2.1],\n",
       "       [5.7, 2.5, 5. , 2. ],\n",
       "       [5.8, 2.8, 5.1, 2.4],\n",
       "       [6.4, 3.2, 5.3, 2.3],\n",
       "       [6.5, 3. , 5.5, 1.8],\n",
       "       [7.7, 3.8, 6.7, 2.2],\n",
       "       [7.7, 2.6, 6.9, 2.3],\n",
       "       [6. , 2.2, 5. , 1.5],\n",
       "       [6.9, 3.2, 5.7, 2.3],\n",
       "       [5.6, 2.8, 4.9, 2. ],\n",
       "       [7.7, 2.8, 6.7, 2. ],\n",
       "       [6.3, 2.7, 4.9, 1.8],\n",
       "       [6.7, 3.3, 5.7, 2.1],\n",
       "       [7.2, 3.2, 6. , 1.8],\n",
       "       [6.2, 2.8, 4.8, 1.8],\n",
       "       [6.1, 3. , 4.9, 1.8],\n",
       "       [6.4, 2.8, 5.6, 2.1],\n",
       "       [7.2, 3. , 5.8, 1.6],\n",
       "       [7.4, 2.8, 6.1, 1.9],\n",
       "       [7.9, 3.8, 6.4, 2. ],\n",
       "       [6.4, 2.8, 5.6, 2.2],\n",
       "       [6.3, 2.8, 5.1, 1.5],\n",
       "       [6.1, 2.6, 5.6, 1.4],\n",
       "       [7.7, 3. , 6.1, 2.3],\n",
       "       [6.3, 3.4, 5.6, 2.4],\n",
       "       [6.4, 3.1, 5.5, 1.8],\n",
       "       [6. , 3. , 4.8, 1.8],\n",
       "       [6.9, 3.1, 5.4, 2.1],\n",
       "       [6.7, 3.1, 5.6, 2.4],\n",
       "       [6.9, 3.1, 5.1, 2.3],\n",
       "       [5.8, 2.7, 5.1, 1.9],\n",
       "       [6.8, 3.2, 5.9, 2.3],\n",
       "       [6.7, 3.3, 5.7, 2.5],\n",
       "       [6.7, 3. , 5.2, 2.3],\n",
       "       [6.3, 2.5, 5. , 1.9],\n",
       "       [6.5, 3. , 5.2, 2. ],\n",
       "       [6.2, 3.4, 5.4, 2.3],\n",
       "       [5.9, 3. , 5.1, 1.8]])"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']\n"
     ]
    }
   ],
   "source": [
    "# Columns in iris dataset\n",
    "print(dataset.feature_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['setosa' 'versicolor' 'virginica']\n"
     ]
    }
   ],
   "source": [
    "# Class names in iris dataset\n",
    "print(dataset.target_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2]\n"
     ]
    }
   ],
   "source": [
    "# Class name mapping\n",
    "# 0 = setosa\n",
    "# 1 = versicolor\n",
    "# 2 = virginica\n",
    "print(dataset.target)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Data plotting for visualisation of the data\n",
    "X, Y = dataset.data, dataset.target \n",
    "# The indices of the features that we are plotting\n",
    "x_index = 0\n",
    "y_index = 1\n",
    "\n",
    "# this formatter will label the colorbar with the correct target names\n",
    "formatter = plt.FuncFormatter(lambda i, *args: dataset.target_names[int(i)])\n",
    "\n",
    "plt.figure(figsize=(5, 4))\n",
    "plt.scatter(X[:, x_index], X[:, y_index], c=Y)\n",
    "plt.colorbar(ticks=[0, 1, 2], format=formatter)\n",
    "plt.xlabel(dataset.feature_names[x_index])\n",
    "plt.ylabel(dataset.feature_names[y_index])\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Train the data here"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "# split the data into training and test set using sklearn's train_test_split\n",
    "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using sklearn's KNN module"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy score with k = 5\n",
      "96.66666666666667\n"
     ]
    }
   ],
   "source": [
    "k = 5\n",
    "KNN = KNeighborsClassifier(n_neighbors=k)\n",
    "# training the model\n",
    "KNN.fit(X_train,Y_train)\n",
    "# predicting the testing dataset\n",
    "y_pred = KNN.predict(X_test)\n",
    "# Calculating accuracy\n",
    "score = metrics.accuracy_score(Y_test, y_pred)\n",
    "print(\"Accuracy score with k =\",k)\n",
    "print(score*100)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Predicting using new test data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "classes = {0:\"setosa\", 1:\"versicolor\", 2:\"virginica\"}\n",
    "testSet = [[1.8, 3.6, 3.4, 1.2]]\n",
    "y_predict = KNN.predict(testSet)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "versicolor\n"
     ]
    }
   ],
   "source": [
    "print(classes[y_predict[0]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exercise\n",
    "\n",
    "### Check the accuracy score for values of k ranging from 1 to 25\n",
    "Use the k that gives maximum accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
